home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / eyeball.s < prev    next >
Text File  |  1995-09-14  |  15KB  |  917 lines

  1. ItsAEyeBall:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$0f1f,14(a0)
  10.  move.w #$1020,6(a0)
  11.  
  12.  move.b worry(a0),d0
  13.  move.b d0,d1
  14.  and.w #128,d1
  15.  and.b #127,d0
  16.  sub.b #1,d0
  17.  bge.s .oknn
  18.  move.b #0,d0
  19. .oknn: 
  20.  
  21.  add.b d0,d1
  22.  move.b d1,worry(a0)
  23.  
  24.  move.w (a0),CollId
  25.  move.w #160,extlen
  26.  move.b #2,awayfromwall
  27.  
  28.  move.l #0,StepUpVal
  29.  move.l #$1000000,StepDownVal
  30.  move.l #96*128,thingheight
  31.  move.w #8,screamsound
  32.  move.w #64,nasheight
  33.  
  34.  clr.b gotgun
  35.  move.w 12(a0),d2
  36.  bge.s .stillalive
  37. .notthisone:
  38.  move.w 12(a0),GraphicRoom(a0)
  39.  rts
  40. .stillalive:
  41.  
  42. .notdying: 
  43.  
  44.  tst.b 17(a0)
  45.  beq.s .cantseeplayer
  46.  tst.w ThirdTimer(a0)
  47.  ble EyeBallAttack
  48.  move.w TempFrames,d0
  49.  sub.w d0,ThirdTimer(a0)
  50.  bra .waitandsee
  51.  
  52. .cantseeplayer:
  53.  
  54.  jsr GetRand
  55.  lsr.w #4,d0
  56.  and.w #31,d0
  57.  add.w #10,d0
  58.  move.w d0,ThirdTimer(a0)
  59.  
  60. .waitandsee:
  61.  
  62.  move.w #30,FourthTimer(a0)
  63.  
  64.  move.w 12(a0),d2
  65.  move.l ZoneAdds,a5
  66.  move.l (a5,d2.w*4),d0
  67.  add.l LEVELDATA,d0
  68.  move.l d0,objroom
  69.  
  70.  jsr ViewpointToDraw
  71.  
  72.  move.l alframe,d0
  73.  add.l #$F0012,d0
  74.  move.l d0,8(a0)
  75.  
  76.  move.w TurnSpeed(a0),d0
  77.  add.w Facing(a0),d0
  78.  and.w #8190,d0
  79.  move.w d0,Facing(a0)
  80.  
  81.  move.w 4(a0),d0
  82.  ext.l d0
  83.  asl.l #7,d0
  84.  sub.l #48*128,d0
  85.  move.l d0,newy
  86.  move.l d0,oldy
  87.  
  88.  move.w 12(a0),FromZone
  89.  jsr CheckTeleport
  90.  tst.b OKTEL
  91.  beq.s .notel
  92.  move.l floortemp,d0
  93.  asr.l #7,d0
  94.  add.w d0,4(a0)
  95.  bra .nochangedir
  96. .notel:
  97.  
  98.  
  99.  move.w maxspd(a0),d2
  100.  muls TempFrames,d2
  101.  move.w d2,speed
  102.  move.w Facing(a0),d0
  103.  move.b ObjInTop(a0),StoodInTop
  104.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  105.  jsr GoInDirection
  106.  move.w #%1000000000,wallflags
  107.  
  108.  move.l #%11111111110111100001,CollideFlags
  109.  jsr Collision
  110.  tst.b hitwall
  111.  beq.s .okcanmove
  112.  
  113.  move.w oldx,newx
  114.  move.w oldz,newz
  115.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  116.  bra.s .hitathing
  117.  
  118. .okcanmove:
  119.  
  120.  clr.b wallbounce
  121.  jsr MoveObject
  122.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  123.  move.b StoodInTop,ObjInTop(a0)
  124.  
  125. .hitathing:
  126.  
  127. ; tst.b hitwall
  128. ; beq.s .nochangedir
  129. ; move.w #-1,ObjTimer(a0)
  130. .nochangedir
  131.  
  132.  move.l objroom,a2
  133.  move.w (a2),12(a0)
  134.  move.w newx,(a1)
  135.  move.w newz,4(a1)
  136.  
  137.  move.w (a2),d0
  138.  move.l #ZoneBrightTable,a5
  139.  move.l (a5,d0.w*4),d0
  140.  tst.b ObjInTop(a0)
  141.  bne.s .okbit
  142.  swap d0
  143. .okbit:
  144.  move.w d0,2(a0)
  145.  
  146.  move.l ToZoneFloor(a2),d0
  147.  move.l ToZoneRoof(a2),d1
  148.  tst.b ObjInTop(a0)
  149.  beq.s .notintop
  150.  move.l ToUpperFloor(a2),d0
  151.  move.l ToUpperRoof(a2),d1
  152. .notintop:
  153.  
  154.  move.w objyvel(a0),d2
  155.  add.w d2,4(a0)
  156.  
  157.  move.w 4(a0),d2
  158.  ext.l d2
  159.  asl.l #7,d2
  160.  move.l d2,d3
  161.  add.l #48*256,d2
  162.  sub.l #48*256,d3
  163.  
  164.  cmp.l d0,d2
  165.  blt.s .botnohit
  166.  move.l d0,d2
  167.  move.l d2,d3
  168.  neg.w objyvel(a0)
  169.  sub.l #96*256,d3
  170. .botnohit:
  171.  
  172.  cmp.l d1,d3
  173.  bgt.s .topnohit
  174.  move.l d1,d3
  175.  neg.w objyvel(a0)
  176. .topnohit:
  177.  
  178.  add.l #48*256,d3
  179.  asr.l #7,d3
  180.  move.w d3,4(a0)
  181.  
  182.  move.b damagetaken(a0),d2
  183.  beq .noscream
  184.  
  185.  sub.b d2,numlives(a0)
  186.  bgt .notdeadyet
  187.  
  188.  movem.l d0-d7/a0-a6,-(a7)
  189.  sub.l ObjectPoints,a1
  190.  add.l #ObjRotated,a1
  191.  move.l (a1),Noisex
  192.  move.w #400,Noisevol
  193.  move.w #14,Samplenum
  194.  move.b #1,chanpick
  195.  clr.b notifplaying
  196.  st backbeat
  197.  move.b 1(a0),IDNUM
  198.  jsr MakeSomeNoise
  199.  movem.l (a7)+,d0-d7/a0-a6
  200.  
  201.  movem.l d0-d7/a0-a6,-(a7)
  202.  move.w #0,d0
  203.  move.w #9,d2
  204.  move.w #31,d3
  205.  jsr ExplodeIntoBits
  206.  movem.l (a7)+,d0-d7/a0-a6
  207.  move.w #-1,12(a0)
  208.  move.w 12(a0),GraphicRoom(a0)
  209.  rts
  210.  
  211. .noexplode:
  212.  
  213.  movem.l d0-d7/a0-a6,-(a7)
  214.  sub.l ObjectPoints,a1
  215.  add.l #ObjRotated,a1
  216.  move.l (a1),Noisex
  217.  move.w #200,Noisevol
  218.  move.w screamsound,Samplenum
  219.  move.b #1,chanpick
  220.  clr.b notifplaying
  221.  st backbeat
  222.  move.b 1(a0),IDNUM
  223.  jsr MakeSomeNoise
  224.  movem.l (a7)+,d0-d7/a0-a6
  225.  move.w #18,10(a0)
  226.  move.w #30,ThirdTimer(a0)
  227.  move.w #0,FourthTimer(a0)
  228.  move.w 12(a0),GraphicRoom(a0)
  229.  rts
  230.  
  231. .notdeadyet:
  232.  clr.b damagetaken(a0)
  233.  movem.l d0-d7/a0-a6,-(a7)
  234.  sub.l ObjectPoints,a1
  235.  add.l #ObjRotated,a1
  236.  move.l (a1),Noisex
  237.  move.w #200,Noisevol
  238.  move.w screamsound,Samplenum
  239.  move.b #1,chanpick
  240.  clr.b notifplaying
  241.  move.b 1(a0),IDNUM
  242.  st backbeat
  243.  jsr MakeSomeNoise
  244.  movem.l (a7)+,d0-d7/a0-a6
  245.  
  246. .noscream
  247.  
  248.  
  249.  move.w TempFrames,d0
  250.  sub.w d0,ObjTimer(a0)
  251.  bge.s .keepsamedir
  252.  
  253.  jsr GetRand
  254.  lsr.w #4,d0
  255.  and.w #255,d0
  256.  sub.w #128,d0
  257.  add.w d0,d0
  258.  move.w d0,TurnSpeed(a0)
  259.  move.w #50,ObjTimer(a0)
  260.  
  261.  jsr GetRand
  262.  lsr.w #4,d0
  263.  and.w #7,d0
  264.  sub.w #3,d0
  265.  move.w d0,d1
  266.  jsr GetRand
  267.  lsr.w #5,d0
  268.  and.w #1,d0
  269.  sub.w d0,d1
  270.  move.w d1,objyvel(a0)
  271.  
  272. .keepsamedir:
  273.  
  274.  move.w TempFrames,d0
  275.  sub.w d0,SecTimer(a0)
  276.  bge.s .nohiss
  277.  
  278.  movem.l d0-d7/a0-a6,-(a7)
  279.  sub.l ObjectPoints,a1
  280.  add.l #ObjRotated,a1
  281.  move.l (a1),Noisex
  282.  move.w #100,Noisevol
  283.  move.w #16,Samplenum
  284.  move.b #1,chanpick
  285.  clr.b notifplaying
  286.  move.b 1(a0),IDNUM
  287.  st backbeat
  288.  jsr MakeSomeNoise
  289.  movem.l (a7)+,d0-d7/a0-a6
  290.  
  291.  Jsr GetRand
  292.  lsr.w #6,d0
  293.  and.w #255,d0
  294.  add.w #300,d0
  295.  move.w d0,SecTimer(a0)
  296.  
  297. .nohiss:
  298.  
  299.  move.b ObjInTop(a0),ViewerTop
  300.  move.b PLR1_StoodInTop,TargetTop
  301.  move.l PLR1_Roompt,ToRoom
  302.  move.l objroom,FromRoom
  303.  move.w newx,Viewerx
  304.  move.w newz,Viewerz
  305.  move.w PLR1_xoff,Targetx
  306.  move.w PLR1_zoff,Targetz
  307.  move.l PLR1_yoff,d0
  308.  asr.l #7,d0
  309.  move.w d0,Targety
  310.  move.w 4(a0),Viewery
  311.  jsr CanItBeSeen
  312.  
  313.  clr.b 17(a0)
  314.  tst.b CanSee
  315.  beq .carryonprowling
  316.  
  317.  move.b #1,17(a0)
  318.  
  319. .carryonprowling:
  320.  
  321.  cmp.b #'n',mors
  322.  beq.s .carryonprowling2
  323.  
  324.  move.b ObjInTop(a0),ViewerTop
  325.  move.b PLR2_StoodInTop,TargetTop
  326.  move.l PLR2_Roompt,ToRoom
  327.  move.l objroom,FromRoom
  328.  move.w newx,Viewerx
  329.  move.w newz,Viewerz
  330.  move.w PLR2_xoff,Targetx
  331.  move.w PLR2_zoff,Targetz
  332.  move.l PLR2_yoff,d0
  333.  asr.l #7,d0
  334.  move.w d0,Targety
  335.  move.w 4(a0),Viewery
  336.  jsr CanItBeSeen
  337.  
  338.  tst.b CanSee
  339.  beq .carryonprowling2
  340.  
  341.  or.b #2,17(a0)
  342.  
  343. .carryonprowling2:
  344.  
  345.  
  346.  move.w 12(a0),GraphicRoom(a0)
  347.  rts
  348.  
  349. EyeBallAttack:
  350.  
  351.  btst #0,17(a0)
  352.  beq EyeBallAttackPLR2
  353.  btst #1,17(a0)
  354.  beq EyeBallAttackPLR1
  355.  
  356.  move.l ObjectPoints,a1
  357.  move.w (a0),d0
  358.  move.w (a1,d0.w*8),d1
  359.  move.w 4(a1,d0.w*8),d2
  360.  
  361.  move.w PLR1_xoff,d3
  362.  move.w PLR1_zoff,d4
  363.  
  364.  sub.w d1,d3
  365.  sub.w d2,d4
  366.  
  367.  muls d3,d3
  368.  muls d4,d4
  369.  add.l d4,d3
  370.  move.w PLR2_xoff,d4
  371.  move.w PLR2_zoff,d5
  372.  sub.w d1,d4
  373.  sub.w d2,d5
  374.  
  375.  muls d4,d4
  376.  muls d5,d5
  377.  add.l d5,d4
  378.  cmp.l d3,d4
  379.  bgt EyeBallAttackPLR1
  380.  
  381. EyeBallAttackPLR2:
  382.  
  383.  move.w TempFrames,d0
  384.  sub.w d0,FourthTimer(a0)
  385.  bgt.s .oktoshoot
  386.  move.w #50,ThirdTimer(a0)
  387. .oktoshoot:
  388.  
  389.  move.w 12(a0),d2
  390.  move.l ZoneAdds,a5
  391.  move.l (a5,d2.w*4),d0
  392.  add.l LEVELDATA,d0
  393.  move.l d0,objroom
  394.  
  395.  jsr ViewpointToDraw
  396.  
  397.  move.l #$F0012,d0
  398.  move.l d0,8(a0)
  399.  
  400.  move.w PLR2_xoff,newx
  401.  move.w PLR2_zoff,newz
  402.  move.w (a0),d1
  403.  move.l #ObjRotated,a6
  404.  move.l ObjectPoints,a1
  405.  lea (a1,d1.w*8),a1
  406.  lea (a6,d1.w*8),a6
  407.  move.w (a1),oldx
  408.  move.w 4(a1),oldz
  409.  move.w maxspd(a0),d2
  410.  muls.w TempFrames,d2
  411.  move.w d2,speed
  412.  move.w #80,Range
  413.  move.w 4(a0),d0
  414.  ext.l d0
  415.  asl.l #7,d0
  416.  sub.l #48*256,d0
  417.  move.l d0,newy
  418.  move.l d0,oldy
  419.  
  420.  move.b ObjInTop(a0),StoodInTop
  421.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  422.  clr.b canshove
  423.  clr.b GotThere
  424.  jsr HeadTowardsAng
  425.  move.w #%1000000000,wallflags
  426.  
  427.  
  428.  clr.b wallbounce
  429.  Jsr MoveObject
  430.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  431.  move.b StoodInTop,ObjInTop(a0)
  432.  
  433.  move.w AngRet,Facing(a0)
  434.  
  435.  move.l objroom,a2
  436.  move.w (a2),12(a0)
  437.  move.w oldx,(a1)
  438.  move.w oldz,4(a1)
  439.  
  440.  move.w (a2),d0
  441.  move.l #ZoneBrightTable,a5
  442.  move.l (a5,d0.w*4),d0
  443.  tst.b ObjInTop(a0)
  444.  bne.s .okbit
  445.  swap d0
  446. .okbit:
  447.  move.w d0,2(a0)
  448.  
  449.  move.l ToZoneFloor(a2),d0
  450.  move.l ToZoneRoof(a2),d1
  451.  tst.b ObjInTop(a0)
  452.  beq.s .notintop
  453.  move.l ToUpperFloor(a2),d0
  454.  move.l ToUpperRoof(a2),d1
  455. .notintop:
  456.  
  457.  move.w objyvel(a0),d2
  458.  add.w d2,4(a0)
  459.  
  460.  move.w 4(a0),d2
  461.  ext.l d2
  462.  asl.l #7,d2
  463.  move.l d2,d3
  464.  add.l #48*256,d2
  465.  sub.l #48*256,d3
  466.  
  467.  cmp.l d0,d2
  468.  blt.s .botnohit
  469.  move.l d0,d2
  470.  move.l d2,d3
  471.  neg.w objyvel(a0)
  472.  sub.l #96*256,d3
  473. .botnohit:
  474.  
  475.  cmp.l d1,d3
  476.  bgt.s .topnohit
  477.  move.l d1,d3
  478.  neg.w objyvel(a0)
  479. .topnohit:
  480.  
  481.  add.l #48*256,d3
  482.  asr.l #7,d3
  483.  move.w d3,4(a0)
  484.  
  485.  move.b damagetaken(a0),d2
  486.  beq .noscream
  487.  
  488.  sub.b d2,numlives(a0)
  489.  bgt .notdeadyet
  490.  
  491.  
  492.  movem.l d0-d7/a0-a6,-(a7)
  493.  sub.l ObjectPoints,a1
  494.  add.l #ObjRotated,a1
  495.  move.l (a1),Noisex
  496.  move.w #400,Noisevol
  497.  move.w #14,Samplenum
  498.  move.b #1,chanpick
  499.  clr.b notifplaying
  500.  st backbeat
  501.  move.b 1(a0),IDNUM
  502.  jsr MakeSomeNoise
  503.  movem.l (a7)+,d0-d7/a0-a6
  504.  
  505.  movem.l d0-d7/a0-a6,-(a7)
  506.  move.w #0,d0
  507.  move.w #9,d2
  508.  move.w #31,d3
  509.  jsr ExplodeIntoBits
  510.  movem.l (a7)+,d0-d7/a0-a6
  511.  move.w #-1,12(a0)
  512.  move.w 12(a0),GraphicRoom(a0)
  513.  rts
  514.  
  515. .noexplode:
  516.  
  517.  movem.l d0-d7/a0-a6,-(a7)
  518.  sub.l ObjectPoints,a1
  519.  add.l #ObjRotated,a1
  520.  move.l (a1),Noisex
  521.  move.w #200,Noisevol
  522.  move.w screamsound,Samplenum
  523.  move.b #1,chanpick
  524.  clr.b notifplaying
  525.  st backbeat
  526.  move.b 1(a0),IDNUM
  527.  jsr MakeSomeNoise
  528.  movem.l (a7)+,d0-d7/a0-a6
  529.  move.w #18,10(a0)
  530.  move.w 12(a0),GraphicRoom(a0)
  531.  rts
  532.  
  533. .notdeadyet:
  534.  clr.b damagetaken(a0)
  535.  movem.l d0-d7/a0-a6,-(a7)
  536.  sub.l ObjectPoints,a1
  537.  add.l #ObjRotated,a1
  538.  move.l (a1),Noisex
  539.  move.w #200,Noisevol
  540.  move.w screamsound,Samplenum
  541.  move.b #1,chanpick
  542.  clr.b notifplaying
  543.  move.b 1(a0),IDNUM
  544.  st backbeat
  545.  jsr MakeSomeNoise
  546.  movem.l (a7)+,d0-d7/a0-a6
  547.  
  548. .noscream
  549.  
  550. ; tst.b canshootgun
  551. ; beq .cantshoot
  552.  cmp.w #20,FourthTimer(a0)
  553.  bge .cantshoot
  554.  
  555.   move.w #50,ThirdTimer(a0)
  556.  
  557.  move.w #18,10(a0)
  558.  
  559.  
  560.  move.w #20,Samplenum
  561.  move.b #0,SHOTTYPE
  562.  move.b #5,SHOTPOWER
  563.  move.w #16,SHOTSPEED
  564.  move.w #3,SHOTSHIFT
  565.  move.b ObjInTop(a0),SHOTINTOP
  566.  move.w #0,SHOTOFFMULT
  567.  move.w #-10,2(a0)
  568.  move.l #0,SHOTYOFF
  569.  jsr FireAtPlayer2
  570.  
  571. .cantshoot:
  572.  
  573.  
  574.  move.w TempFrames,d0
  575.  sub.w d0,SecTimer(a0)
  576.  bge.s .nohiss
  577.  
  578.  movem.l d0-d7/a0-a6,-(a7)
  579.  sub.l ObjectPoints,a1
  580.  add.l #ObjRotated,a1
  581.  move.l (a1),Noisex
  582.  move.w #100,Noisevol
  583.  move.w #16,Samplenum
  584.  move.b #1,chanpick
  585.  clr.b notifplaying
  586.  move.b 1(a0),IDNUM
  587.  st backbeat
  588.  jsr MakeSomeNoise
  589.  movem.l (a7)+,d0-d7/a0-a6
  590.  
  591.  Jsr GetRand
  592.  lsr.w #6,d0
  593.  and.w #255,d0
  594.  add.w #300,d0
  595.  move.w d0,SecTimer(a0)
  596.  
  597. .nohiss:
  598.  
  599.  move.b ObjInTop(a0),ViewerTop
  600.  move.b PLR1_StoodInTop,TargetTop
  601.  move.l PLR1_Roompt,ToRoom
  602.  move.l objroom,FromRoom
  603.  move.w newx,Viewerx
  604.  move.w newz,Viewerz
  605.  move.w PLR1_xoff,Targetx
  606.  move.w PLR1_zoff,Targetz
  607.  move.l PLR1_yoff,d0
  608.  asr.l #7,d0
  609.  move.w d0,Targety
  610.  move.w 4(a0),Viewery
  611.  jsr CanItBeSeen
  612.  
  613.  clr.b 17(a0)
  614.  tst.b CanSee
  615.  beq .carryonprowling
  616.  
  617.  move.b #1,17(a0)
  618.  
  619. .carryonprowling:
  620.  
  621.  cmp.b #'n',mors
  622.  beq.s .carryonprowling2
  623.  
  624.  
  625.  move.b ObjInTop(a0),ViewerTop
  626.  move.b PLR2_StoodInTop,TargetTop
  627.  move.l PLR2_Roompt,ToRoom
  628.  move.l objroom,FromRoom
  629.  move.w newx,Viewerx
  630.  move.w newz,Viewerz
  631.  move.w PLR2_xoff,Targetx
  632.  move.w PLR2_zoff,Targetz
  633.  move.l PLR2_yoff,d0
  634.  asr.l #7,d0
  635.  move.w d0,Targety
  636.  move.w 4(a0),Viewery
  637.  jsr CanItBeSeen
  638.  
  639.  tst.b CanSee
  640.  beq .carryonprowling2
  641.  
  642.  or.b #2,17(a0)
  643.  
  644. .carryonprowling2:
  645.  
  646.  move.w 12(a0),GraphicRoom(a0)
  647.  rts
  648.  
  649.  
  650. EyeBallAttackPLR1:
  651.  
  652.  move.w TempFrames,d0
  653.  sub.w d0,FourthTimer(a0)
  654.  bgt.s .oktoshoot
  655.  move.w #50,ThirdTimer(a0)
  656. .oktoshoot:
  657.  
  658.  move.w 12(a0),d2
  659.  move.l ZoneAdds,a5
  660.  move.l (a5,d2.w*4),d0
  661.  add.l LEVELDATA,d0
  662.  move.l d0,objroom
  663.  
  664.  jsr ViewpointToDraw
  665.  
  666.  move.l #$F0012,d0
  667.  move.l d0,8(a0)
  668.  
  669.  move.w PLR1_xoff,newx
  670.  move.w PLR1_zoff,newz
  671.  move.w (a0),d1
  672.  move.l #ObjRotated,a6
  673.  move.l ObjectPoints,a1
  674.  lea (a1,d1.w*8),a1
  675.  lea (a6,d1.w*8),a6
  676.  move.w (a1),oldx
  677.  move.w 4(a1),oldz
  678.  move.w maxspd(a0),d2
  679.  muls.w TempFrames,d2
  680.  move.w d2,speed
  681.  move.w #80,Range
  682.  move.w 4(a0),d0
  683.  ext.l d0
  684.  asl.l #7,d0
  685.  sub.l #20*256,d0
  686.  move.l d0,newy
  687.  move.l d0,oldy
  688.  
  689.  move.b ObjInTop(a0),StoodInTop
  690.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  691.  clr.b canshove
  692.  clr.b GotThere
  693.  jsr HeadTowardsAng
  694.  move.w #%1000000000,wallflags
  695.  
  696.   
  697.  clr.b wallbounce
  698.  Jsr MoveObject
  699.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  700.  move.b StoodInTop,ObjInTop(a0)
  701.  
  702.  move.w AngRet,Facing(a0)
  703.  
  704.  move.l objroom,a2
  705.  move.w (a2),12(a0)
  706.  move.w oldx,(a1)
  707.  move.w oldz,4(a1)
  708.  
  709.  move.w (a2),d0
  710.  move.l #ZoneBrightTable,a5
  711.  move.l (a5,d0.w*4),d0
  712.  tst.b ObjInTop(a0)
  713.  bne.s .okbit
  714.  swap d0
  715. .okbit:
  716.  move.w d0,2(a0)
  717.  
  718.  move.l ToZoneFloor(a2),d0
  719.  move.l ToZoneRoof(a2),d1
  720.  tst.b ObjInTop(a0)
  721.  beq.s .notintop
  722.  move.l ToUpperFloor(a2),d0
  723.  move.l ToUpperRoof(a2),d1
  724. .notintop:
  725.  
  726.  move.w objyvel(a0),d2
  727.  add.w d2,4(a0)
  728.  
  729.  move.w 4(a0),d2
  730.  ext.l d2
  731.  asl.l #7,d2
  732.  move.l d2,d3
  733.  add.l #48*256,d2
  734.  sub.l #48*256,d3
  735.  
  736.  cmp.l d0,d2
  737.  blt.s .botnohit
  738.  move.l d0,d2
  739.  move.l d2,d3
  740.  neg.w objyvel(a0)
  741.  sub.l #96*256,d3
  742. .botnohit:
  743.  
  744.  cmp.l d1,d3
  745.  bgt.s .topnohit
  746.  move.l d1,d3
  747.  neg.w objyvel(a0)
  748. .topnohit:
  749.  
  750.  add.l #48*256,d3
  751.  asr.l #7,d3
  752.  move.w d3,4(a0)
  753.  
  754.  move.b damagetaken(a0),d2
  755.  beq .noscream
  756.  
  757.  sub.b d2,numlives(a0)
  758.  bgt .notdeadyet
  759.  
  760.  
  761.  movem.l d0-d7/a0-a6,-(a7)
  762.  sub.l ObjectPoints,a1
  763.  add.l #ObjRotated,a1
  764.  move.l (a1),Noisex
  765.  move.w #400,Noisevol
  766.  move.w #14,Samplenum
  767.  move.b #1,chanpick
  768.  clr.b notifplaying
  769.  st backbeat
  770.  move.b 1(a0),IDNUM
  771.  jsr MakeSomeNoise
  772.  movem.l (a7)+,d0-d7/a0-a6
  773.  
  774.  movem.l d0-d7/a0-a6,-(a7)
  775.  move.w #0,d0
  776.  move.w #9,d2
  777.  move.w #31,d3
  778.  jsr ExplodeIntoBits
  779.  movem.l (a7)+,d0-d7/a0-a6
  780.  move.w #-1,12(a0)
  781.  move.w 12(a0),GraphicRoom(a0)
  782.  rts
  783.  
  784. .noexplode:
  785.  
  786.  movem.l d0-d7/a0-a6,-(a7)
  787.  sub.l ObjectPoints,a1
  788.  add.l #ObjRotated,a1
  789.  move.l (a1),Noisex
  790.  move.w #200,Noisevol
  791.  move.w screamsound,Samplenum
  792.  move.b #1,chanpick
  793.  clr.b notifplaying
  794.  st backbeat
  795.  move.b 1(a0),IDNUM
  796.  jsr MakeSomeNoise
  797.  movem.l (a7)+,d0-d7/a0-a6
  798.  move.w #18,10(a0)
  799.  move.w 12(a0),GraphicRoom(a0)
  800.  rts
  801.  
  802. .notdeadyet:
  803.  clr.b damagetaken(a0)
  804.  movem.l d0-d7/a0-a6,-(a7)
  805.  sub.l ObjectPoints,a1
  806.  add.l #ObjRotated,a1
  807.  move.l (a1),Noisex
  808.  move.w #200,Noisevol
  809.  move.w screamsound,Samplenum
  810.  move.b #1,chanpick
  811.  clr.b notifplaying
  812.  move.b 1(a0),IDNUM
  813.  st backbeat
  814.  jsr MakeSomeNoise
  815.  movem.l (a7)+,d0-d7/a0-a6
  816.  
  817. .noscream
  818.  
  819. ; tst.b canshootgun
  820. ; beq .cantshoot
  821.  cmp.w #20,FourthTimer(a0)
  822.  bge .cantshoot
  823.  
  824.  move.w #50,ThirdTimer(a0)
  825.  
  826.  move.w #18,10(a0)
  827.  
  828.  
  829.  move.w #20,Samplenum
  830.  move.b #0,SHOTTYPE
  831.  move.b #5,SHOTPOWER
  832.  move.w #16,SHOTSPEED
  833.  move.w #3,SHOTSHIFT
  834.  move.b ObjInTop(a0),SHOTINTOP
  835.  move.w #0,SHOTOFFMULT
  836.  move.w #-10,2(a0)
  837.  move.l #0,SHOTYOFF
  838.  jsr FireAtPlayer1
  839.  
  840. .cantshoot:
  841.  
  842.  
  843.  move.w TempFrames,d0
  844.  sub.w d0,SecTimer(a0)
  845.  bge.s .nohiss
  846.  
  847.  movem.l d0-d7/a0-a6,-(a7)
  848.  sub.l ObjectPoints,a1
  849.  add.l #ObjRotated,a1
  850.  move.l (a1),Noisex
  851.  move.w #100,Noisevol
  852.  move.w #16,Samplenum
  853.  move.b #1,chanpick
  854.  clr.b notifplaying
  855.  move.b 1(a0),IDNUM
  856.  st backbeat
  857.  jsr MakeSomeNoise
  858.  movem.l (a7)+,d0-d7/a0-a6
  859.  
  860.  Jsr GetRand
  861.  lsr.w #6,d0
  862.  and.w #255,d0
  863.  add.w #300,d0
  864.  move.w d0,SecTimer(a0)
  865.  
  866. .nohiss:
  867.  
  868.  move.b ObjInTop(a0),ViewerTop
  869.  move.b PLR1_StoodInTop,TargetTop
  870.  move.l PLR1_Roompt,ToRoom
  871.  move.l objroom,FromRoom
  872.  move.w newx,Viewerx
  873.  move.w newz,Viewerz
  874.  move.w PLR1_xoff,Targetx
  875.  move.w PLR1_zoff,Targetz
  876.  move.l PLR1_yoff,d0
  877.  asr.l #7,d0
  878.  move.w d0,Targety
  879.  move.w 4(a0),Viewery
  880.  jsr CanItBeSeen
  881.  
  882.  clr.b 17(a0)
  883.  tst.b CanSee
  884.  beq .carryonprowling
  885.  
  886.  move.b #1,17(a0)
  887.  
  888. .carryonprowling:
  889.  
  890.  cmp.b #'n',mors
  891.  beq.s .carryonprowling2
  892.  
  893.  
  894.  move.b ObjInTop(a0),ViewerTop
  895.  move.b PLR2_StoodInTop,TargetTop
  896.  move.l PLR2_Roompt,ToRoom
  897.  move.l objroom,FromRoom
  898.  move.w newx,Viewerx
  899.  move.w newz,Viewerz
  900.  move.w PLR2_xoff,Targetx
  901.  move.w PLR2_zoff,Targetz
  902.  move.l PLR2_yoff,d0
  903.  asr.l #7,d0
  904.  move.w d0,Targety
  905.  move.w 4(a0),Viewery
  906.  jsr CanItBeSeen
  907.  
  908.  tst.b CanSee
  909.  beq .carryonprowling2
  910.  
  911.  or.b #2,17(a0)
  912.  
  913. .carryonprowling2:
  914.  
  915.  move.w 12(a0),GraphicRoom(a0)
  916.  rts
  917.